//
//  Ext+SLComposeTextView.swift
//  langligelang
//
//  Created by 秦－政 on 2016/11/4.
//  Copyright © 2016年 pete. All rights reserved.
//

import UIKit

extension SLComposeTextView {
    // 声明一个字符串属性
    var emoticonText: String {
        var result = ""
        // 遍历富文本
        self.attributedText.enumerateAttributes(in: NSMakeRange(0, self.attributedText.length), options: []) { (info, range, _) in
            /*
             info: 富文本的描述信息
             range: 富文本的范围
             UnsafeMutablePointer :  遍历是否停止标记
             */
            print(info)
            if let attachment = info["NSAttachment"] as? SLTextAttachment {
                // 表示是图片表情富文本
                let emoticon = attachment.emoticon!
                result += emoticon.chs!
            } else {
                // 文字富文本
                //  根据文字富文本的范围获取对应的范围的富文本
                let textAttributedStr = self.attributedText.attributedSubstring(from: range)
                // 根据富文本获取对应的字符串
                let text = textAttributedStr.string
                result += text
            }
        }
        return result
    }
    // 根据表情模型插入对应的富文本
    func insertEmoticon(emoticon: SLEmoticon) {
        
        if emoticon.type == "0" {            
            //  记录上一次的富文本
            let lastAttributedString = NSMutableAttributedString(attributedString: self.attributedText)
            // 使用 NSAttributedString 扩展创建表情富文本
            let attributedStr = NSAttributedString.attributedStringWithEmoticon(emoticon: emoticon, font: self.font!)
            //  获取选中的富文本
            var selectRange = self.selectedRange
            lastAttributedString.replaceCharacters(in: selectRange, with: attributedStr)
            
            //  设置富文本的字体大小
            lastAttributedString.addAttribute(NSFontAttributeName, value: self.font!, range: NSMakeRange(0, lastAttributedString.length))
            
            // 设置富文本
            self.attributedText = lastAttributedString
            //  设置光标位置
            selectRange.location += 1
            //  设置范围的长度
            selectRange.length = 0
            self.selectedRange = selectRange
            
            //  设置富文本不会发送文字改变的通知和不用掉用文字改变的代理方法
            
            //  自己发送文字改变的通知
            NotificationCenter.default.post(name: NSNotification.Name.UITextViewTextDidChange, object: nil)
            //  自定义使用代理对象调用代理方法
            //  文字改变的代理方法是可选, 为了安全性,可以使用?判断一下这个方式是否实现,如果实现了那么可以直接调用,否则直接 nil
            //  现在这个情况可以强制解包,原因我们已经实现了 '!'\
            //  使用'!'向系统保证我的方法一定实现了
            self.delegate?.textViewDidChange?(self)
      
        } else {
            //  emoji
            self.insertText((emoticon.code! as NSString).emoji())
        }
    }

}




















